package com.tanhua.dubbo.api.mongo;

import com.tanhua.domain.mongo.Conclusion;
import com.tanhua.domain.mongo.Report;
import com.tanhua.domain.vo.AnswersVo;

import java.util.List;

import com.tanhua.domain.mongo.Option;
import com.tanhua.domain.mongo.Question;
import com.tanhua.domain.mongo.Questionnaire;
import com.tanhua.domain.mongo.UserQuestionnaireStates;
import org.bson.types.ObjectId;



/**
 * @Author:DD
 * @Date :2021/10/6 12:14
 */
public interface TestSoulApi {
    /**
     * 根据用户id从userquestionnairestatus获取初级,中级,高级的锁定解锁状态
     * @param userId
     * @return
     */
    UserQuestionnaireStates getQuestionnaireStatus(Long userId);

    /**
     * 获取所有的调查问卷表的数据
     * @return
     */
    List<Questionnaire> findAllQuestionnaire();

    /**
     * 根据调查问卷表的发布id去问题表获取其问题数据
     * @param Id
     * @return
     */
    List<Question> findQuestionById(ObjectId Id);

    /**
     * 根据问题发布id去option表去获取选项数据
     * @param id
     * @return
     */
    List<Option> findOption(ObjectId id);

    /**
     * 查询四个维度累计分数封装到报告对象中返回
     * @param answerVos
     * @return
     */
    Report findScore(List<AnswersVo> answerVos);

    /**
     * 根据计算的分数查询用户的鉴定结果
     * @param score
     * @return
     */
    Conclusion findConclusion(double score);

    void saveReport(Report report, Long userId, String questionId);

    /**
     * 解锁下一等级的试卷
     * @param questionId
     * @param userId
     */
    void unlockNextQuestionnaire(String questionId, Long userId);


    /**
     * @Description: 根据id 从鉴定表中查询维度值
     * @Param:
     * @return:
     **/
    Report findReportById(String id);

    /**
     * @Description: 根据conclusionId，查询根据conclusion对应的信息
     * @Param:
     * @return:
     **/
    Conclusion findConclusionById(Object conclusionId);

    /**
     * @Description: 遍历查询conclusion表，获取conclusionId相同的userId放入到集合中
     * @Param:
     * @return:
     **/
    List<Long> findSimilarYou(Object conclusionId , Long userId);

    /**
     * 通过当前用户userId与当前试卷等级，查询对应等级的报告id
     * @param userId
     * @param star
     * @return
     */
    String getReportId(Long userId, Integer star);
}
